package com.haoliang.spring.component.lifecycle.config;

import com.haoliang.spring.component.lifecycle.bean.LifecycleBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @Author zhaohaoliang
 * @Date 创建于 下午5:35 2019/3/10
 * @Description 请输入类的描述信息
 * 创建【容器启动】->初始化->销毁【容器关闭】
 * 创建：单实例，容器每次启动时创建；多实例，每次获取对象的时候创建
 * 初始化：对象创建完成，并赋值好，条用初始化方法
 * 销毁：单实例，容器每次关闭时调用销毁方法；多实例，容器不会管理多实例bean的销毁
 * 1、指定初始化和销毁方法 [在配置文件中init-method和destroy-method]
 * @Bean(initMethod = "init",destroyMethod = "destroy")
 * 2、让bean实现InitializingBean和DisposableBean接口。
 * 实现初始化逻辑和销毁逻辑。
 * 3、使用JSR250规范【@PostConstruct,在创建Bean和赋值完成后调用该方法】【@PreDestroy，在移除容器之前调用该方法】
 * 4、使用BeanPostProcessor，bean的后置处理器，在bean初始化前后进行操作
 *    postProcessBeforeInitialization和postProcessAfterInitialization
 */
@ComponentScan(value = "com.haoliang.spring.component.lifecycle")
@Configuration
public class MainLifecycleConfig {

    @Bean(value = "lifecycleBean", initMethod = "init", destroyMethod = "destroy")
    public LifecycleBean getLifecycleBean() {
        return new LifecycleBean();
    }

}
